#include "stdafx.h"
#include "ckMatrixI.h"

namespace ck
{
	namespace data
	{
		MatrixI::MatrixI()
		{
			m_data = NULL;
		}

		MatrixI::~MatrixI()
		{
			if (m_data)
			{
				delete[] m_data;
				m_data = NULL;
			}
		}

		RESULTCODE MatrixI::Create(z_byte* pBytes, z_uint32 w, z_uint32 h)
		{
			if (m_data)
			{
				delete[] m_data;
				m_data = NULL;
			}

			m_width = w;
			m_height = h;

			z_uint64 nSize = w * h;
			m_data = new z_int32[nSize];

			z_byte* pbr = pBytes;
			z_int32* ptr = m_data;
			for (z_uint32 i = 0; i < m_height; i++)
			{
				for (z_uint32 j = 0; j < m_width; j++, pbr++, ptr++)
				{
					int v = *pbr;
					if (v > 0)
					{
						v = 0;
					}
					*ptr = *pbr;
				}
			}
			
			return RC_SUCCESS;
		}

		z_int32* MatrixI::GetData()
		{
			return m_data;
		}

		z_int32* MatrixI::GetDataPtr(z_uint32 i, z_uint32 j)
		{
			return (m_data + i * m_width + j);
		}

		z_int32 MatrixI::GetValue(z_uint32 i, z_uint32 j)
		{
			return *(m_data + i * m_width + j);
		}

		void MatrixI::operator/=(double n)
		{
			if (n == 0.0)
			{
				return;
			}
			if (m_data)
			{
				z_int32* ptr = m_data;
				for (z_uint32 i = 0; i < m_height; i++)
				{
					for (z_uint32 j = 0; j < m_width; j++, ptr++)
					{
						if (*ptr > 0)
						{
							*ptr = *ptr / n;
						}
					}
				}
			}
		}
	}
}
